package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

//FileName :p.go
//ime :2024/3/27 22:31
//Author :syr030111

func compressString(s string) string {
	if len(s) == 0 {
		return ""
	} //首先检查输入字符串 s 是否为空。如果为空，则直接返回空字符串。

	// 初始化
	var compressed string      // 用于存储压缩后的字符串
	compressed += string(s[0]) // 添加第一个字符
	count := 1                 // 初始化计数器

	// 遍历字符串
	for i := 1; i < len(s); i++ { // 使用 for 循环从输入字符串 s 的第二个字符开始遍历
		if s[i] == s[i-1] {
			count++ // 如果当前字符与前一个字符相同，则增加计数器
		} else {
			//如果不同，则将 count 的值转换为字符串，并拼接到 compressed 中
			//然后将当前字符也拼接到 compressed 中，并重置 count 为 1
			compressed += strconv.Itoa(count) // 将之前的字符的计数转换为字符串并拼接
			compressed += string(s[i])        // 拼接当前字符
			count = 1                         // 重置计数器
		}
	}

	// 处理最后一个字符集
	// 循环结束后，最后一个字符集的计数还没有被添加到 compressed 中。
	// 因此，将 count 的值转换为字符串，并拼接到 compressed 中。

	compressed += strconv.Itoa(count) // 添加最后一个字符集的计数

	return compressed // 返回压缩后的字符串

}

func main() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("请输入任意字符串: ")
	input, _ := reader.ReadString('\n') // 读取用户输入的字符串
	input = strings.TrimSpace(input)    // 去除字符串两端的空白字符，包括空格和换行符

	a := compressString(input) // 调用之前定义的compressString函数，将处理后的用户输入字符串进行压缩。
	fmt.Println(a)             // 输出结果
}

